Intel Movidius神经计算棒“疑难杂症”全解析——如何从开始到精通(使用指导、性能测试)
爱板网已经发布过关于英特尔Movidius神经计算棒的评测文章,但是限制于篇幅没有很细的把内容逐一说明,所以本篇内容是对评测的细化以及补充,哪怕是零基础的朋友,在看完本文之后相信也能迅速上手Intel Movidius神经计算棒。
在开始之前,让我先问你三个问题:
如果你能在USB棒上运行最先进的神经网络?
如果你能看到这个USB棒拥有10倍于你CPU的性能?
在达成以上条件的情况下,如果整个设备的成本低于100美元?
是不是听起来非常有趣?
来,一起进入英特尔的Movidius神经计算棒的世界。
Movidius神经计算棒(NCS)
大概树莓派的用户会特别欢迎Movidius神经计算棒,因为它可以显著改善图像分类并且提升对图像的检测速度和能力,“众里寻他千百度,慕然回首那人却在灯火阑珊处”,或许这句话是对你突然发现Movidius神经计算棒最好的诠释。你会发现Movidius NCS“正是你所需要的”可以加快神经网络推断时间的小型化以及极具性价比的人工智能玩意。
本篇文章,我们将讨论:
Movidius神经计算棒能够做什么?
值不值得买?
如何快速,轻松地的运行Movidius NCS?
对比在MacBook Pro以及Raspberry Pi上使用/不使用Movidius NCS所需的神经网络推断时间。
什么是英特尔Movidius神经计算棒?
英特尔的Neural Compute Stick是一款USB3.0接口的拇指大小的深度学习机器,下面几点你需要了解。
你可以把NCS看作是一个USB供电的GPU,尽管这有些夸大——因为它并不是一个GPU,而且只能用于预测/推理,而不是训练。更确切的说,我是将NCS归类为协处理器,它只有一个目的:运行神经网络计算。在下文中,主要使用NCS进行图像分类。
NCS 不应该用于训练神经网络模型,而是用于基于现有的模型做推理,由于NCS旨在配合单板计算机(如树莓派)使用,意味着功耗非常低,使其不适合实际训练网络。
所以现在你就会有疑问:我到底该不该购买Movidius NCS吗?(爱板商城有树莓派+Movidius神经计算棒组合套餐的优惠促销)
在Movidius神经计算棒的内部有一颗Myriad 2处理器(28nm工艺),具有80~150 GFLOPS的性能,该处理器也被称为视觉处理单元 (或视觉加速器),功耗仅为1W左右(作为参考,树莓派3B在HDMI关闭,LED熄灭和WiFi开启时功耗大概在1.2W)。
是否值得购买NCS取决于下面几个问题的答案:
你是否有立即使用神经网络做推断的需求?或者还是愿意花77美元玩另一种玩意?
您是否愿意加入一个具有发展前景但是目前规模不算大的AI社区,另外也不清楚Myraid 2是否能经得住市场长期考验?
你是否愿意将一台机器(或VM)投入到SDK的开发中?
树莓派用户:您是否愿意将独立的Pi或至少一个单独的microSD用于NCS开发?
问题1取决于你。
我提出问题2的原因是因为英特尔的文档太简陋了,而且在支持力度上不是那么友好,比如说我之前试用的Galileo产品上,现在已经停止更新了。我提这个的意思并不是说NCS也会发生,毕竟NCS处于深度学习领域,目前正在全速前进,所以这款产品的未来看起来还是不错的,并且它也没有太多的竞争产品,至少目前是这样的。
问题2和3(及其答案)是相关的。简而言之,您无法将开发环境与虚拟环境隔离,安装程序实际上会从您的系统中删除先前安装的OpenCV。出于这个原因,您不应该在当前项目和工作环境的任何位置获得安装程序脚本。从目前来说,大多数人都会购买Movidius NCS与Raspberry Pi或其他单板计算机配对使用。
问题4是针对树莓派的。说到树莓派,如果您一直在关注爱板网树莓派版块上的其它教程,您就会意识到将新项目与现有项目的环境隔离有多重要。我对神经计算棒最大的抱怨之一是英特尔的安装脚本实际上会让你的虚拟环境几乎无法使用,安装程序会从Debian/Ubuntu Aptitude repos下载软件包并更改你的PYTHONPATH系统变量。
真的很麻烦,为了安全起见,所以强烈建议你使用新的microSD与Raspbian Stretch,如果您正在开发一个可部署项目,您甚至可能会购买另一个Pi来与NCS结合。
Movidius NCS工作流程
英特尔Movidius NCS工作流程
理解神经计算棒的工作流程会使得使用NCS变得更加容易,所以是非常有必要的。
我们实际使用的时候,最终是生成一个graph文件来部署到NCS,如果你愿意,这个graph文件可以和你的Python脚本位于同一个目录中——通过NCS API将graph文件发送到NCS。
一般来说,使用NCS的工作流程是:
使用预先训练好的TensorFlow/Caffe模型或在Ubuntu/Debian上使用Tensorflow/Caffe 训练网络。
使用NCS SDK工具链生成graph文件
将graph文件和NCS部署到运行Ubuntu的单板计算机上,我用Raspberry Pi 3 B运行Raspbian(基于Debian)
使用Python,通过NCS API将graph文件发送到NCS请求图像预测,处理预测结果并根据结果进行(任意)操作
本文将只使用NCS API在树莓派上建立工具链,这种方式可以生成最低限度的SDK工具用于创建graph文件,但是不会安装Caffe,Tensorflow等软件,毕竟目前树莓派也不支持TendorFlow。
为了简单起见,可以直接使用Movidius GitHub页面上(https://github.com/movidius/ncsdk/tree/master/examples/caffe/SqueezeNet)预先训练好的Caffe模型和prototxt文件(或者也可以通过Makefile从DeepScale GitHub仓库下载)。
执行Makefile将会:
下载Caffe文件
使用NCS API生成graph文件
这里,我们将使用官方的示例脚本+一个静态图像来使用Movidius神经计算棒。之后,还将创建自己的自定义图像分类基准测试脚本。
首先,让我们准备我们的树莓派。
在纯API模式下设置树莓派和NCS
通过阅读一些稀少(确实稀少,赶潮流的东西就是金贵)的文档,我认识到了树莓派无法处理官方提供的NCSDK。(哈哈,好笑吧)
但后来又通过英特尔官方Blog找到了解决方法(很讽刺吧),让我可以在仅API模式下设置树莓派(教程地址:https://movidius.github.io/blog/ncs-apps-on-rpi/),效果很好,用这种放肆很快就能运转树莓派与神经计算棒的组合,现在就说说具体该怎么做。
对于你的树莓派,我建议你在全新的Raspbian Stretch系统上以纯API模式安装SDK。
如果你的树莓派已经安装了Raspbian Stretch OS,建议你重新再树莓派官网下载镜像烧写,不然容易出现各种问题,相信我,Intel官方提供的SDK对环境极其苛刻。
然后,就可以启动你的树莓派并连接到WiFi。如果您愿意,可以通过SSH连接或使用显示器+键盘/鼠标完成以下所有操作。
更新系统:
sudo apt-get update && sudo apt-get upgrade
然后,安装一堆软件包:
sudo apt-get install -y libusb-1.0-0-dev libprotobuf-dev
sudo apt-get install -y libleveldb-dev libsnappy-dev
sudo apt-get install -y libopencv-dev
sudo apt-get install -y libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev git automake
sudo apt-get install -y byacc lsb-release cmake
sudo apt-get install -y libgflags-dev libgoogle-glog-dev
sudo apt-get install -y liblmdb-dev swig3.0 graphviz
sudo apt-get install -y libxslt-dev libxml2-dev
sudo apt-get install -y gfortran
sudo apt-get install -y python3-dev python-pip python3-pip
sudo apt-get install -y python3-setuptools python3-markdown
sudo apt-get install -y python3-pillow python3-yaml python3-pygraphviz
sudo apt-get install -y python3-h5py python3-nose python3-lxml
sudo apt-get install -y python3-matplotlib python3-numpy
sudo apt-get install -y python3-protobuf python3-dateutil
sudo apt-get install -y python3-skimage python3-scipy
sudo apt-get install -y python3-six python3-networkx
需要注意的是,我这是从Debian存储库安装了 libopencv - dev,这是我第一次推荐它,也希望是最后一次。因为这里通过apt-get安装OpenCV存在3个问题
(1)安装较旧版本的OpenCV
(2)不安装完整版本的OpenCV
(3)没法好好支持各种系统操作
再一次,我不推荐这种方法来安装OpenCV。
另外,你可以看到上面安装一大堆我通常喜欢用pip在Python虚拟环境中管理的包,所以再一次请确保你使用的是新的存储卡,这样你就不会在你的树莓派上搞砸你现在可能正在做的项目。
好了,现在先来创建一个工作空间目录并克隆NCSDK:
cd ~
mkdir workspace
cd workspace
git clone https://github.com/movidius/ncsdk
再克隆ncappzoo,因为我们稍后会需要它。
git clone https://github.com/movidius/ncappzoo
然后找到下面的目录:
cd ncsdk/api/src
在该目录中,使用Makefile以纯API模式安装SDK:
make
sudo make install
测试NCS上的Raspberry Pi安装
安装结束后有必要测试安装情况,将NCS插到树莓派上,这里使用NC App Zoo中的代码进行测试安装情况。
cd ncappzoo/apps/hello_ncs_py
make run
运行结果
如果OK,你应该看到如上的输出。
生成Movidius NCS神经网络
SqueezeNet网络模型包含在NC App Zoo中,通过使用Makefile很容易生成所需graph文件。
更多基于官方提供的demo演示应用可以参考爱板网之前的评测(树莓派+Movidius NCS神经计算棒=2018年最佳的AI学习平台?),本文不再重复。
树莓派和深度学习成果
本次基准测试中,首先使用树莓派3的CPU测试,然后再通过使用树莓派3与NCS的组合的测试情况。
为了好玩,后来又加入了Macbook Pro(带和不带NCS)的测试结果(不过这是通过构建和配置的Ubuntu 16.04虚拟机实现的)。
测试中使用三种深度学习模型:
SqueezeNet
GoogLeNet
AlexNet
为了简单起见,每次都使用同一张图片运行分类——理发椅:
由于终端输出的结果很长,所以下面我会分开截好几张图,另外,为了便于查看对比结果,最后我会整理一个对比结果表格。
以下是CPU命令(你也可以在你的树莓派或桌面/笔记本电脑上实际运行此命令):
注意: 为了使用OpenCV DNN模块,您至少要安装OpenCV 3.3版本。
下面是NCS上的命令, 使用刚刚通过的新修改后的脚本(你也可以在你的树莓派或桌面/笔记本电脑上实际运行此脚本):
NCS API模式工具链使用OpenCV 2.4,因此没有新的DNN模块。您不能在NCS中使用虚拟环境,因此您需要完全隔离的系统。
现在将结果汇总在表格中:
与使用树莓派上的CPU在GoogLeNet上的速度相比,NCS与树莓派的组合实现了6.45倍的分类加速(545%),由此可知,神经计算棒会在大型的神经网络上会带来明显的加速,例如上面比较的三个网络。
不过,将我的MacBook Pro与MBP&NCS组合相比时,NCS不再有傲娇优势了,甚至会更差——这主要有以下几个原因:
首先,毫无疑问MBP拥有更强大的CPU(毕竟是桌面级别的层次,功耗也摆在那)。而且事实也证明,在CPU上运行完整推理的速度要快于将图像从CPU移动到NCS并将结果返回的时间差;其次,通过USB与虚拟机通信并不友好,存在延迟等问题,更别谈更好的支持USB3.0。
值得注意的是,Raspberry Pi 3B只有USB 2.0接口,如果真的想要单板电脑安装的速度,请选择支持USB 3.0的机器,比如之前爱板网评测过的Up Squared Board+NCS组合,如果进行基准测试,数据传输速度将会很明显。本篇文章先到这里,后续会继续更新。
总结
今天我们探索了一个新奇、超前的玩意——英特尔Movidius神经计算棒,此文的目的是向你展示这个新的深度学习设备所具备的潜力,文章演示了如何使用NCS的工作流程以及API。
一般来说,NCS工作流程需要:
使用运行Ubuntu/Debian的机器(或使用预先训练的网络)通过Tensorflow或Caffe培训网络。
使用NCS SDK生成graph文件
将graph文件和NCS部署到运行Linux(Debian)的单板计算机上,文章中是通过树莓派3B(基于Debian)实现的。
执行推理,分类,对象检测等
本文跳过了第1步和第2步,相应的,拿现成的直接可以在树莓派上使用的graph文件测试,然后,编写基于Python的分类基准测试脚本,并分析了在树莓派上实现10倍加速的结果。目前为止,NCS的功能留给我的印象非常深刻——它与树莓派组合非常友好(除了目前不支持TensorFlow),希望你会喜欢英特尔的这个玩意!
最后,爱板网在这里祝大家新年快乐、心想事成。让我们明年见~